package cn.tedu.csmall.passport.preload;

import cn.tedu.csmall.passport.mapper.RoleMapper;
import cn.tedu.csmall.passport.pojo.vo.RoleListItemVO;
import cn.tedu.csmall.passport.repo.IRoleRedisRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

import java.util.List;

@Slf4j
@Component
public class CachePreload implements ApplicationRunner {
    @Autowired
    private RoleMapper roleMapper;
    @Autowired
    private IRoleRedisRepository roleRedisRepository;

    public CachePreload() {
        log.debug("创建开机自动执行的组件对象：CachePreload");
    }

    // ApplicationRunner中的run()方法会在项目启动成功之后自动执行
    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.debug("CachePreload.run()");

        log.debug("准备删除Redis缓存中的角色数据……");
        roleRedisRepository.deleteAll();
        log.debug("删除Redis缓存中的角色数据，完成！");

        log.debug("准备从数据库中读取角色列表……");
        List<RoleListItemVO> list = roleMapper.list();
        log.debug("从数据库中读取角色列表，完成！");

        log.debug("准备将角色列表写入到Redis缓存……");
        roleRedisRepository.save(list);
        log.debug("将角色列表写入到Redis缓存，完成！");

//        log.debug("准备将各角色详情写入到Redis缓存......");
//        for (RoleListItemVO roleListItemVO : list) {
//            Long id = roleListItemVO.getId();
//            RoleStandardVO roleStandardVO = roleMapper.getStandardById(id);
//            roleRedisRepository.save(roleStandardVO);
//        }
//        log.debug("将各角色详情写入到Redis缓存, 完成! ");
    }
}
